package com.baizhiedu.dynamic;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

/**
 * 功能：
 * 作者：HZj
 * 日期：2024/12/19 21:46
 */
public class Arround implements MethodInterceptor {

    /*
    * invoke方法的作用：额外功能书写在invoke
    *                 额外功能  原始方法之前
    *                          原始方法之后
    *                          原始方法执行之前 之后
    * 确定：原始方法怎么运行
    * 参数：MethodInvocation   (Method)：额外功能所增加给的那个原始方法
    *           login
    *           register
    *       invocation.proceed() --> login运行
    *                                register运行
    * 返回值：Object：原始方法的返回值
    *
    *   Date convert(String name)
    */
//    @Override
//    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
//        System.out.println("----额外功能运行在原始功能之前----");
//        Object ret = null;
//        try {
//            ret = methodInvocation.proceed();
//        } catch (Throwable throwable) {
//            System.out.println("----原始方法抛出异常 执行的额外功能-----");
//            throwable.printStackTrace();
//        }
//        System.out.println("----额外功能运行在原始功能之后----");
//        return ret;
//    }

    /*
    * MethodInterceptor影响原始方法的返回值
    * 原始方法的返回值，直接作为invoke方法的返回值返回，MethodInterceptor不会影响原始方法的返回值
    */
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        System.out.println("----log----");
        Object ret = methodInvocation.proceed();
        return ret;
    }
}
